home *** CD-ROM | disk | FTP | other *** search
/ Night Owl 6 / Night Owl's Shareware - PDSI-006 - Night Owl Corp (1990).iso / 001a / com_and3.zip / BREAKOUT.CMD < prev    next >
OS/2 REXX Batch file  |  1990-02-19  |  5KB  |  327 lines

  1. ; ----- BREAKOUT: Play a breakout game.
  2. ; ----------------------------------------------------------------
  3. ;    Note: This script plays a breakout-style game.    Cursor control
  4. ;    keys or mouse may be used to control the paddle.  Comments in
  5. ;    this script have been limited for execution speed.
  6. ; ----------------------------------------------------------------
  7. ;
  8. ; Initialize
  9. ;
  10. GOSUB Init
  11. SET FLAG OFF
  12. ; Move the ball until keypress or obstruction
  13. Ball:
  14. IF GE N1 79
  15.    N1 = 79
  16.    N3 = -1
  17.    ENDIF
  18. IF LE N1 0
  19.    N1 = 0
  20.    N3 = 1
  21.    ENDIF
  22. IF HITKEY GOTO Paddle
  23. N4 = N0
  24. N5 = N1
  25. N0 = N0+N2
  26. N1 = N1+N3
  27. SWIT N4
  28.   CASE 1
  29.   ATSAY N4,N5 (Blac,blue) S4
  30.   ENDC
  31.   CASE 2
  32.   ATSAY N4,N5 (Blac,cyan) S4
  33.   ENDC
  34.   CASE 3
  35.   ATSAY N4,N5 (Blac,yell) S4
  36.   ENDC
  37.   CASE 4
  38.   ATSAY N4,N5 (Blac,red) S4
  39.   ENDC
  40.   CASE 22
  41.   ATSAY N4,N5 (Blac,Gree) S4
  42.   ENDC
  43.   DEFA
  44.   ATSAY N4,N5 (Blac,Whit) S4
  45.   ENDC
  46. ENDS
  47. ATSCR N0,N1 1 S4
  48. N4 = N0
  49. N5 = N1
  50. ATSAY N0,N1 (Blac,Whit) "o"
  51. IF LE N0,0
  52.    GOTO Hit_Top
  53.    ENDIF
  54. IF LT N0 5
  55.    GOTO In_Bricks
  56.    ENDIF
  57. SET FLAG OFF
  58. IF GE N0,22
  59.    GOTO On_Paddle
  60.    ENDIF
  61. IF LE N1,0
  62.    GOTO Wall
  63.    ENDIF
  64. IF GE N1,79
  65.    GOTO Wall
  66.    ENDIF
  67. GOTO Ball
  68. ;
  69. ;    We've hit the top
  70. ;
  71. Hit_Top:
  72. N2 = -N2
  73. SET FLAG ON
  74. GOTO Ball
  75. ;
  76. ;    We've hit the left or right wall
  77. ;
  78. Wall:
  79. N3 = -N3
  80. SOUND 100 10
  81. IF GE N0 4 ; test in bricks
  82.    GOTO Ball
  83.    ENDIF
  84. ;
  85. ;    We're in the bricks
  86. ;
  87. In_Bricks:
  88. IF NULL S4
  89.    GOTO Ball
  90.    ENDIF
  91. IF GT N2 0 ; going down
  92.    GOTO Breakout
  93.    ENDIF
  94. ;
  95. ;    Take a brick
  96. ;
  97. Take_Brick:
  98. N8 = (N1/4)*4
  99. N7 = N8+3
  100. SWIT N0
  101.    CASE  1
  102.    S0(N8:N7) = "    "
  103.    S3(N1:N1) = "o"
  104.    ATSAY 1,N8 (Blac,Blue) S0(N8:N7)
  105.    SOUND 4000 1
  106.    N10 = N10+4
  107.    ENDC
  108.  
  109.    CASE  2
  110.    S1(N8:N7) = "    "
  111.    S3(N1:N1) = "o"
  112.    ATSAY 2,N8 (Blac,cyan) S1(N8:N7)
  113.    SOUND 2000 1
  114.    N10 = N10+3
  115.    ENDC
  116.  
  117.    CASE  3
  118.    S2(N8:N7) = "    "
  119.    S3(N1:N1) = "o"
  120.    ATSAY 3,N8 (Blac,yell) S2(N8:N7)
  121.    SOUND 1000 1
  122.    N10 = N10+2
  123.    ENDC
  124.  
  125.    CASE  4
  126.    S3(N8:N7) = "    "
  127.    S3(N1:N1) = "o"
  128.    ATSAY 4,N8 (Blac,red ) S3(N8:N7)
  129.    SOUND 500 1
  130.    N10 = N10+4
  131.    ENDC
  132. ENDS
  133. S4 = " "
  134. N2 = -N2
  135. GOTO Ball
  136. ;
  137. ;    We have a breakout
  138. ;
  139. Breakout:
  140. IF NOT FLAG
  141.    GOTO Ball
  142.    ENDIF
  143. SWIT N0
  144.    CASE  1
  145.    ENDC
  146.  
  147.    CASE  2
  148.    N8 = N1+N3
  149.    IF NULL S2(N8:N8)
  150.       N2 = -N2
  151.       ENDIF
  152.    ENDC
  153.  
  154.    CASE  3
  155.    N8 = N1+N3
  156.    IF NULL S3(N8:N8)
  157.       N2 = -N2
  158.       ENDIF
  159.    ENDC
  160.  
  161.    CASE  4
  162.    N2 = -N2
  163.    ENDC
  164. ENDS
  165. GOTO Take_Brick
  166. ;
  167. ;    We're on the paddle line
  168. ;
  169. On_Paddle:
  170. N8 = N9-1
  171. IF EQ N1 N8
  172.    GOTO Reverse
  173.    ENDIF
  174. N8 = N9+4
  175. IF EQ N1 N8
  176.    GOTO Reverse
  177.    ENDIF
  178. IF EQ N1 N9
  179.    GOTO English
  180.    ENDIF
  181. N8 = N9+3
  182. IF EQ N1 N8
  183.    GOTO English
  184.    ENDIF
  185. IF LT N1 N9
  186.    GOTO Missed
  187.    ENDIF
  188. IF GT N1 N8
  189.    GOTO Missed
  190.    ENDIF
  191. ;
  192. ;    Hit on the paddle
  193. ;
  194. SOUND 300 10
  195. N2 = -N2
  196. IF LT N3 0
  197.    N3 = -1
  198. ELSE
  199.    N3 = 1
  200. ENDIF
  201. GOTO Ball
  202. ;
  203. ;    Give some english
  204. ;
  205. English:
  206. SOUND 300 10
  207. N2 = -N2
  208. IF LT N3 0
  209.    N3 = N3-1
  210. ELSE
  211.    N3 = N3+1
  212. ENDIF
  213. GOTO Ball
  214. ;
  215. ;    Return the ball
  216. ;
  217. Reverse:
  218. SOUND 200 10
  219. N2 = -N2
  220. N3 = -N3
  221. GOTO Ball
  222. ;
  223. ;    Move the paddle
  224. ;
  225. Paddle:
  226. KEYGET S7
  227. IF STRCMP S7(0:3) "4D00" GOTO Right_paddle
  228. IF STRCMP S7(0:3) "4B00" GOTO Left_Paddle
  229. GOTO Ball
  230. ;
  231. ;    Move the paddle right
  232. ;
  233. Right_Paddle:
  234. ATSAY 22,N9 (Blac,Gree) "    "
  235. IF LT N9 76
  236.    N9 = N9+3
  237. ELSE
  238.    N9 = 76
  239.    ENDIF
  240. ATSAY 22,N9 (Blac,Gree) "____"
  241. IF HITKEY GOTO Paddle
  242. GOTO Ball
  243. ;
  244. ;    Move the paddle left
  245. ;
  246. Left_Paddle:
  247. ATSAY 22,N9 (Blac,Gree) "    "
  248. IF GT N9 3
  249.    N9 = N9-3
  250. ELSE
  251.    N9 = 0
  252.    ENDIF
  253. ATSAY 22,N9 (Blac,Gree) "____"
  254. IF HITKEY GOTO Paddle
  255. GOTO Ball
  256. ;
  257. ;    Missed the ball with the paddle
  258. ;
  259. Missed:
  260. N10 = N10/40 ; 200 max
  261. SWIT N10
  262.    CASE 0
  263.    SOUND 50 100
  264.    ATSAY 22,0 (Blac,gree) "Too bad..."
  265.    ENDC
  266.    CASE 1
  267.    ATSAY 22,0 (Blac,gree) "Not bad..."
  268.    SOUND 50 100
  269.    ENDC
  270.    CASE 2
  271.    ATSAY 22,0 (Blac,gree) "Better than average..."
  272.    ALARM
  273.    ENDC
  274.    CASE 3
  275.    ATSAY 22,0 (Blac,gree) "Real good..."
  276.    SOUND 100,100
  277.    ENDC
  278.    CASE 4
  279.    ATSAY 22,0 (Blac,gree) "Why did you stop?"
  280.    SOUND 100,100
  281.    ENDC
  282.    CASE 5
  283.    ATSAY 22,0 (Blac,gree) "WOW..."
  284.    ALARM
  285.    ENDC
  286. ENDS
  287. EXIT
  288. ;
  289. ;    Initialization...
  290. ;    .. Placed here to cache all pgm labels when we start
  291. ;    .. S0-S3 are the rows of bricks
  292. ;    .. S4     is the character replaced by the ball
  293. ;    .. N0,N1 is the position of the ball (row/col)
  294. ;    .. N2,N3 is the vector of motion (row/col offsets)
  295. ;    .. N9     is the paddle col #
  296. ;
  297. Init:
  298. S0 = "░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░"
  299. S1 = "▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒"
  300. S2 = "▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓"
  301. S3 = "████████████████████████████████████████████████████████████████████████████████"
  302. S4 = " "
  303. N0 = 5
  304. N1 = 0
  305. N2 = 1
  306. N3 = 1
  307. N4 = N0
  308. N5 = N1
  309. N9 = 38
  310. N10 = 0
  311. ;
  312. ;    Set states
  313. ;
  314. CLEAR (Blac,Gree)
  315. LEGEND "                              ... Breakout ..."
  316. CUROFF
  317. SET TTHRU OFF
  318. ;
  319. ;    Paint the screen
  320. ;
  321. ATSAY 1,0 (Blac,Blue) S0
  322. ATSAY 2,0 (Blac,cyan) S1
  323. ATSAY 3,0 (Blac,yell) S2
  324. ATSAY 4,0 (Blac,red) S3
  325. ATSAY 22,N9 (Blac,Gree) "____"
  326. RETURN
  327.